<?
class ListaDeElementos implements usaArreio {
	
	private $elementos = array();
	private $data = array();
	
	function __construct () {
		$this->elementos = array();
	}
	
	public function numElementos() {
		return sizeOf($this->elementos);
	}
	
	public function existe($obj) {
		if (gettype($this->indice($obj)) == boolean) {
			return false;
		} else return true;
	}
	
	public function existeClasse($obj) {
		if (gettype($this->indiceClasse($obj)) == boolean) {
			return false;
		} else return true;
	}
	
	public function toArray() {
		for ($i=0; $i<$this->numElementos(); $i++) {
			$array[$i] = $this->elementos[$i]->toArray();
		}
		return $array;
	}
	
	public function adiciona($obj) {
		$this->elementos[] = $obj;
		return true;
	}
	
	public function remove($obj) {
		if ($this->existe($obj)) {
			for ($i=0; $i<$this->numElementos(); $i++) {
				if ($this->devolve($i) != $obj) $new_array[] = $this->devolve($i);
			}
			$this->elementos = $new_array;
			return true;
		} else return false;
	}
	/*
	public function remove($obj) {
		if ($this->existe($obj)) {
			$this->elementos = array_splice($this->elementos, array_search($obj, $this->elementos), 1);
			return true;
		} else return false;
	}
	*/
	public function devolve($indice) {
		return $this->elementos[$indice];
	}
	
	public function devolvePorId($id) {
		return $this->devolvePorAtrib('id', $id);
	}
	
	public function devolvePorAtrib($atrib, $value) {
		for ($i=0; $i<$this->numElementos(); $i++) {
			//echo '<br/>'.$this->devolve($i)->getValue('nome') .'='. $value;
			if ($this->devolve($i)->getValue($atrib) == $value) {
				return $this->devolve($i);
			}
		}
		return false;
	}
	
	public function indice($obj) {
		for ($i=0; $i<$this->numElementos(); $i++) {
			if ($this->devolve($i) == $obj) {
				return $i;
			}
		}
		return false;
	}
	
	public function indiceClasse($obj) {
		for ($i=0; $i<$this->numElementos(); $i++) {
			if (get_class($this->devolve($i)) == get_class($obj)) {
				return $i;
			}
		}
		return false;
	}
}
?>